/* ===================

AX2E (AXESCON XACML 2.0 Engine) is the Java authorization engine, which implements OASIS XACML 2.0 standard.
Copyright (C) 2007 AXESCON LLC

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA


Contact: AXESCON LLC - info{at}axescon.com

 =================== */
/*
 * XML Type:  AttributeDesignatorImpl
 * Namespace: urn:oasis:names:tc:xacml:2.0:policy:schema:os
 * Java type: axescon.xacml.model.policy.AttributeDesignatorImpl
 *
 * Automatically generated - do not modify.
 */
package axescon.xacml.model.policy.impl;

import axescon.xacml.api.*;
import axescon.xacml.model.shared.attr.AttributeValueHelper;

/**
 * An XML AttributeDesignatorImpl(@urn:oasis:names:tc:xacml:2.0:policy:schema:os).
 * <p/>
 * This is a complex type.
 */
public abstract class AttributeDesignatorImpl extends axescon.xacml.model.policy.impl.ExpressionImpl implements axescon.xacml.model.policy.AttributeDesignator {
    private String attributeId;

    private String dataType;

    private String issuer;

    public boolean isSetIssuer() {
        return issuer != null;
    }

    public void unsetIssuer() {
        issuer = null;
    }

    private boolean mustBePresent;

    public String getAttributeId() {
        return attributeId;
    }

    public void setAttributeId(String attributeId) {
        this.attributeId = attributeId;
    }

    public String getDataType() {
        return dataType;
    }

    public void setDataType(String dataType) {
        this.dataType = dataType;
    }

    public String getIssuer() {
        return issuer;
    }

    public void setIssuer(String issuer) {
        this.issuer = issuer;
    }

    public boolean isMustBePresent() {
        return mustBePresent;
    }

    public void setMustBePresent(boolean mustBePresent) {
        this.mustBePresent = mustBePresent;
    }


    Class returnDataType;


    public Class getReturnDataType(FnFactory ff) throws ExpressionEvalIndeterminateException{
        if(returnDataType==null){
            try {
                returnDataType=AttributeValueHelper.getDefault().newArray(dataType,0).getClass();
            } catch (XacmlException e) {
                throw new ExpressionEvalIndeterminateException("attr designator",
                        XacmlException.ERR_CODE_PROCESSING_UNKNOWN_RETURN_ATTRIBUTE_DESIGNATOR,
                e);
            }
        }
        return returnDataType;
    }

}
